ПолеВвода.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                          ОТДЕЛ ПолеВвода;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: ввод строки текста
 *============================================================================*)
ИСПОЛЬЗУЕТ
  Надел,
  Поле,
  Подложка,
  Холст,
  Черта,
  Кнопка,
  Записка,
  Памятка,
  Вывод ИЗ "..\Обмен\",
  Ввод  ИЗ "..\Обмен\";

(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
ПЕР
  код:ЦЕЛ;
УКАЗ
  ДЛЯ посылка ВИДА
  | Ввод.ОтКлавиш:
      код:=посылка.код;
      посылка.код:=0; (* скорее всего отработаем посылку *)
      ВЫБРАТЬ код ИЗ
      | 1BH: поле.состояние:=Поле.сОтмена (* Esc *)
      | 79H: поле.состояние:=Поле.сДалее  (* F10 *)
      | 0DH: поле.состояние:=Поле.сДалее  (* Ent *)
      ИНАЧЕ
        посылка.код:=код
      КОН
  | Кнопка.Посылка:
      поле.состояние:=посылка.кнопка.действие
  ИНАЧЕ
  КОН             
КОН Приём;

(******************************************************************************)
ЗАДАЧА Выполнить-(
(* Цель:  осуществить ввод строки текста *)
(******************************************************************************)
(* До: *)   
    заголовок-:ЦЕПЬ;      (* заголовок подложки             *)
    колонок:ЦЕЛ;          (* желаемая ширина строки ввода   *)
    окружение:Поле.Доступ;(* окружающее поле                *)
    номерСправки:ЦЕЛ;     (* номер справки или 0            *)
    примечание-:ЦЕПЬ;     (* дополнительное примечание      *)
(* Примечение: если <цепь> = "", то начальное значение берётся из памятки *)
(* После: *)                                                
    цепь+:ЦЕПЬ            (* полученный текст               *)
(* Ответ: *)
):ЦЕЛ;                    (* состояние поля после отработки *)
(******************************************************************************)
ПОСТ
  (* цепочки для кнопок *)
  цДалее ="[ Далее ]";
  цОтмена="[ Отмена ]";
  длДалее =ДЛИНА(цДалее);
  длОтмена=ДЛИНА(цОтмена);
  промежуток=2; (* промежуток между кнопками *)
  занято=длДалее+промежуток+длОтмена;
ПЕР
  поле:Поле.Доступ;
  подложка:Подложка.Доступ;
  черта:Черта.Доступ;
  холст:Холст.Доступ; 
  записка:Записка.Доступ;
  кнДалее,кнОтмена:Кнопка.Доступ;
  позДалее,позОтмена:ЦЕЛ;
УКАЗ
  (* вычисление местоположения кнопок *)
  ЕСЛИ занято > колонок ТО
    колонок:=занято
  КОН;
  позДалее:=2 + (колонок-занято+1) ДЕЛИТЬ 2;
  позОтмена:=позДалее + длДалее + промежуток;
  (* создаём поле *)
  поле:=Поле.Создать(0,0,8,колонок+4,окружение,ВКЛ,Приём);
  (* создаём наделы *)
  подложка:=Подложка.Создать(0,0,0,0,заголовок);
  ЕСЛИ цепь # "" ТО
    холст:=Холст.СоздатьСтроку(2,2,-2,ПУСТО);
    Холст.СтрокуИзЦепи(холст,цепь)
  ИНАЧЕ
    холст:=Холст.СоздатьСтроку(2,2,-2,Памятка.Найти(заголовок))
  КОН;
  записка:=Записка.Создать  (3,2,2,-2,примечание);
  черта:=Черта.Создать      (-3,0,1,0);
  кнДалее:=Кнопка.Создать   (-2,позДалее,цДалее,Поле.сДалее,ВКЛ); 
  кнОтмена:=Кнопка.Создать  (-2,позОтмена,цОтмена,Поле.сОтмена,ВКЛ); 
  (* добавляем наделы вс порядке отрисовки и получения ввода *)
  Поле.ДобавитьНадел(поле,подложка);
  Поле.ДобавитьНадел(поле,холст);
  Поле.ДобавитьНадел(поле,записка);
  Поле.ДобавитьНадел(поле,черта);
  Поле.ДобавитьНадел(поле,кнДалее);
  Поле.ДобавитьНадел(поле,кнОтмена);
  (* основная работа *)
  Поле.Рисовать(поле);
  ПОВТОРЯТЬ
    Поле.Проверить(поле)
  ДО поле.состояние # Поле.сРабота;
  (* восстанавливаем окружение *)
  Поле.Рисовать(окружение);
  (* перебрасываем данные *)
  ЕСЛИ поле.состояние = Поле.сДалее ТО
    Холст.СтрокуВПамятку(холст);
    Холст.СтрокуВЦепь(холст,цепь)
  КОН;
  ВОЗВРАТ поле.состояние
КОН Выполнить;

КОН ПолеВвода.

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы